export class RecorderManager {
  constructor() {
    this.recorderManager = wx.getRecorderManager();
    // 录音部分参数 小程序文档
    this.recordOptions = {
      duration: 60000, // 录音的时长，单位 ms，最大值 600000（10 分钟）
      sampleRate: 44100, // 采样率
      numberOfChannels: 1, // 录音通道数
      encodeBitRate: 192000, // 编码码率
      format: "aac", // 音频格式，选择此格式创建的音频消息，可以在即时通信 IM 全平台（Android、iOS、微信小程序和Web）互通
    };

    // 开始录音的时间
    this.startTime = null;
    // 最短有效录音时间
    this.MIN_DURING = 300;
    // 录音禁用
    this.forbidden = false;
    
    this.recorderManager.onInterruptionBegin((msg) => {
      console.log("录音被系统中断onInterruptionBegin", msg);
      this.stop();
    });
    
    this.recorderManager.onPause((msg) => {
      console.log("录音被系统中断onPause", msg);
      this.stop();
    });
  }

  /**
   * 初始化 添加录音停止的监听
   * @param {*} param0
   */
  init({ onRecordStop }) {
    this.recorderManager.onStop((res) => {
      if (this.forbidden) {
        this.forbidden = false;
        return wx.showToast({ icon: "none", title: "录音时间过短" });
      }
      if (res.duration < this.MIN_DURING) {
        wx.showToast({ icon: "none", title: "录音时间过短" });
      } else {
        onRecordStop && onRecordStop(res);
        // wx.showToast({ icon: "success", title: "录音成功" + res.duration });
      }
    });
  }

  // 开始录音
  start() {
    if (this.forbidden) return;
    this.startTime = Date.now();
    this.recorderManager.start(this.recordOptions);
  }

  stop() {
    if (this.forbidden) return;
    if (Date.now() - this.startTime < this.MIN_DURING) {
      this.forbidden = true;
      setTimeout(() => {
        this.recorderManager.stop();
      }, this.MIN_DURING);
    } else {
      this.recorderManager.stop();
    }
  }
}
